package com.nanhai.buddhist.college.module.collegebase.service.studentroll;

import com.nanhai.buddhist.college.framework.common.pojo.PageResult;
import com.nanhai.buddhist.college.module.collegebase.api.student.dto.StudentRespDTO;
import com.nanhai.buddhist.college.module.collegebase.api.student.vo.UpdatePasswordVO;
import com.nanhai.buddhist.college.module.collegebase.api.teacher.vo.ClassesStudentListPageVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentroll.vo.StudentRollCheckReqVo;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentroll.vo.StudentRollCreateReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentroll.vo.StudentRollExportReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentroll.vo.StudentRollPageReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentroll.vo.StudentRollUpdateReqVO;
import com.nanhai.buddhist.college.module.collegebase.dal.dataobject.studentroll.StudentRollDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 学员信息 Service 接口
 *
 * @author AKai
 */
public interface StudentRollService {

    /**
     * 创建学员信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createStudentRoll(@Valid StudentRollCreateReqVO createReqVO);

    /**
     * 更新学员信息
     *
     * @param updateReqVO 更新信息
     */
    void updateStudentRoll( StudentRollUpdateReqVO updateReqVO);

    /**
     * 删除学员信息
     *
     * @param id 编号
     */
    void deleteStudentRoll(String id);

    /**
     * 获得学员信息
     *
     * @param id 编号
     * @return 学员信息
     */
    StudentRollDO getStudentRoll(String id);

    /**
     * 获得学员信息列表
     *
     * @param ids 编号
     * @return 学员信息列表
     */
    List<StudentRollDO> getStudentRollList(Collection<String> ids);

    /**
     * 获得学员信息分页
     *
     * @param pageReqVO 分页查询
     * @return 学员信息分页
     */
    PageResult<StudentRollDO> getStudentRollPage(StudentRollPageReqVO pageReqVO);

    /**
     * 获得学员信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 学员信息列表
     */
    List<StudentRollDO> getStudentRollList(StudentRollExportReqVO exportReqVO);

    /**
     * 审核学员信息
     *
     * @param req
     */
    void checkStudentRoll(StudentRollCheckReqVo req);

    /**
     * 模糊查询学生信息
     *
     * @param findStr
     * @return
     */
    List<StudentRollDO> getStudentRollListByStr(String findStr);

    PageResult<StudentRollDO> getStudentRespDTOByClassesId(ClassesStudentListPageVO req);

    StudentRollDO getStudentByUserName(String studentUsername);

    /**
     * 修改密码
     * @param req
     */
    void updatedStudentPassword(UpdatePasswordVO req);


    /**
     * 根据班级获取学生列表
     * @param classesId
     * @return
     */
    List<StudentRollDO> getStudentListByClassesId(String classesId);


}
